//package com.example.comsumer;
//
//import com.example.comsumer.common.RpcRequest;
//import com.example.comsumer.common.RpcResponse;
//import com.rpctest.myrpc.common.User;
//import com.rpctest.myrpc.serialize.Serializer;
//import com.rpctest.myrpc.serialize.SerializerImpl.SerializerImpl;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//import java.net.Socket;
//
///**
// * @ClassName RPCNetTEST
// * @Description TODO
// * @Author 11
// * @Date 2021/4/2 10:21
// * @Version 1.0
// */
//public class RPCNetTEST {
//
//    public static Object send(RpcRequest request) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
//        Serializer serializerInstance;
//        //序列化
//        serializerInstance = SerializerImpl.class.getConstructor().newInstance();
//        byte[] sendmsg = serializerInstance.serialize(request);
//        System.out.println("---------------------");
//        RpcRequest req = (RpcRequest) serializerInstance.deserialize(sendmsg, RpcRequest.class);
//        RpcResponse res  = process(req);  //开始远程调用
//        return res.getResult();
//
//    }
//    private static RpcResponse process(RpcRequest req) {
//        //  make response
//        RpcResponse res = new RpcResponse();
//        res.setRequestId(req.getRequestId());
//        // match service bean   后续实现服务注册
//        try{
//            String className = req.getClassName();
//            String methodName = req.getMethodName();
//            Class<?>[] parameterTypes = req.getParameterTypes();
//            Object[] parameters = req.getParameters();
//            System.out.println(className);
//
//            //通过requestid得到实现类类名
//            //实现类Bean
////            String implClassName= RPC.getServerConfig().getServerImplMap().get(request.getServiceId());
//            //通过类名得到Bean
////            Object implClassBean=RPC.serverContext.getBean(implClassName);
//            Object implClassBean=new User();
//            //通过Bean得到实现类 class对象
//            Class implClass=Class.forName(implClassBean.getClass().getName());
//            //class对象获得方法
//            Method method=implClass.getDeclaredMethod(methodName,parameterTypes);
////                Object implObj=RPC.serverContext.getBean(implClass);
//            //调用方法
//            res.setResult(method.invoke(implClassBean,parameters));
//
//
////            //req 通过反射拿到接口的class对象
////            Class<?> clazz = Class.forName(className);
////            Object o = clazz.getConstructor().newInstance(parameters);
////            Class.forName(req.getClassName());
////            //从spring容器中拿出实现类
////            //获取实现类的class对象
////            //获取请求方法的Method对象
////            //通过反射执行其方法
////            //组织返回对象
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        return res;
//    }
//}
